package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import modelo.Producto;
import modelo.ProductoDAO;

import vista.VentanaRegistrarVentaSimple;

public class ControladorRegistrarVentaSimple implements KeyListener, ActionListener, MouseListener {
    
	
	 private VentanaRegistrarVentaSimple vRegistrarVentaSimple;
     private ProductoDAO productoDAO;
	 private boolean encontro;
	
	
	 
	 public ControladorRegistrarVentaSimple(VentanaRegistrarVentaSimple vRegistrarVentaSimple,
			                                ProductoDAO productoDAO, boolean encontro){
		super();
		this.vRegistrarVentaSimple = vRegistrarVentaSimple;
		this.productoDAO = productoDAO;
		this.encontro = encontro;
	}
    

	public ControladorRegistrarVentaSimple() {
		super();
		// TODO Auto-generated constructor stub
		this.vRegistrarVentaSimple= new VentanaRegistrarVentaSimple();
		this.vRegistrarVentaSimple.setVisible(true);
		this.vRegistrarVentaSimple.setLocationRelativeTo(null);
		this.vRegistrarVentaSimple.agregarListener(this,this,this);
		this.productoDAO=new ProductoDAO();
	}


	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
       new ControladorRegistrarVentaSimple();
	}


	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		 char caracter = e.getKeyChar();
		 
         if ((caracter==KeyEvent.VK_DELETE || caracter==KeyEvent.VK_BACK_SPACE) && encontro==true) {
			this.vRegistrarVentaSimple.getLstItemBusqueda().setVisible(true);
			this.vRegistrarVentaSimple.getSpItemBusqueda().setVisible(true);
		     
		}
         
	}

	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		   char caracter = e.getKeyChar();
		   
          if (caracter=='\n' && encontro )
          {
        	       if (this.vRegistrarVentaSimple.getLstItemBusqueda().isSelectionEmpty())
        	    	 this.vRegistrarVentaSimple.getLstItemBusqueda().setSelectedIndex(0);
				
        	     this.vRegistrarVentaSimple.getTxtNombProducto().setText(this.vRegistrarVentaSimple.getLstItemBusqueda().getSelectedValue().toString().trim());
				 this.vRegistrarVentaSimple.getLstItemBusqueda().setVisible(false);
				 this.vRegistrarVentaSimple.getSpItemBusqueda().setVisible(false);   
		  }
         
   }
          
         

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		char caracter = e.getKeyChar();
		
		if(caracter != '\n')
		   busquedaPredictiva(e);
		else if (caracter=='\n' && !encontro )
        	  buscarProducto(vRegistrarVentaSimple.getTxtNombProducto().getText().trim());
	}

	

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		/*if(e.getActionCommand().equalsIgnoreCase("Detallar Venta"))
			//hacer llamda del controlador detallar venta...
		else*/ if(e.getActionCommand().equalsIgnoreCase("Buscar")){
			  buscarProducto(vRegistrarVentaSimple.getTxtNombProducto().getText().trim());}
	    /*else if(e.getActionCommand().equalsIgnoreCase("Limpiar"))
	    else if(e.getActionCommand().equalsIgnoreCase("Guardar"))
	    else if(e.getActionCommand().equalsIgnoreCase("Salir"))*/
	    	
	}


	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		if(e.getClickCount()==2){
			this.vRegistrarVentaSimple.getTxtNombProducto().setText(
			this.vRegistrarVentaSimple.getLstItemBusqueda().getSelectedValue().toString().trim());
			this.vRegistrarVentaSimple.getLstItemBusqueda().setVisible(false);
			this.vRegistrarVentaSimple.getSpItemBusqueda().setVisible(false);
			
		}
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	
	// metodos....
	
	private void busquedaPredictiva(KeyEvent e) {
		// TODO Auto-generated method stub
         
		if(this.vRegistrarVentaSimple.getTxtNombProducto().getText().isEmpty()){
			this.vRegistrarVentaSimple.getModeloItemProducto().clear();
			this.vRegistrarVentaSimple.getLstItemBusqueda().setVisible(false);
			this.vRegistrarVentaSimple.getSpItemBusqueda().setVisible(false);
			encontro=false;
		}
		else {
			 String cadena1= this.vRegistrarVentaSimple.getTxtNombProducto().getText().trim();
			
			if(productoDAO.BusquedaPredictiva(this.vRegistrarVentaSimple.getModeloItemProducto(),cadena1).isEmpty()){
				   encontro=false;
				   this.vRegistrarVentaSimple.getLstItemBusqueda().setVisible(false);
				   this.vRegistrarVentaSimple.getSpItemBusqueda().setVisible(false);
				   
			}else{
				this.vRegistrarVentaSimple.getLstItemBusqueda().setModel(productoDAO.BusquedaPredictiva(this.vRegistrarVentaSimple.getModeloItemProducto(),cadena1));
			    encontro=true;
			    this.vRegistrarVentaSimple.getLstItemBusqueda().setVisible(true);
				this.vRegistrarVentaSimple.getSpItemBusqueda().setVisible(true);
			}	
		}
	}
	
	private void buscarProducto(String id_producto){
			Producto producto = productoDAO.consultarProductoPorId(id_producto);
		if(producto!=null){
			vRegistrarVentaSimple.getTxtNombProducto().setText(producto.getDescripcion_produ().trim());
			encontro=true;
		}
		else if(!encontro){
			vRegistrarVentaSimple.mostrarMensaje("Codigo de producto invalido");
			vRegistrarVentaSimple.getTxtNombProducto().setText("");
			encontro = false;
		    }	
		
	}


}
